//路由处理函数

// 引入mysql数据库
const db=require('../db/index')

// 引入加密
const bcrypt = require('bcryptjs')

// 引入生成token的库
const jwt = require('jsonwebtoken')

// 导入token的密钥
const secretKey=require('../config').jwtSecretKey
// 注册
exports.register=(req,res)=>{
    const userinfo=req.body
    // 自己判断:判断用户名密码是否合法
    // if(!userinfo.username||!userinfo.password){
    //     return res.send({
    //         status:201,
    //         msg:'用户名或密码不合法'
    //     })
    // }

    // 判断用户名是否已经存在
    const sql1="select * from ev_users where username=?"

    db.query(sql1,userinfo.username,(err,result)=>{
        if(err){
            return res.send({
                status:201,
                msg:err.message
            })
        }

        // 如果用户名存在
        if(result.length>0){
            return res.send({
                status:201,
                msg:"用户名已被占用,请更换其他用户名"
            })
        }


        // 用户名不存在
        // 密码加密
        userinfo.password = bcrypt.hashSync(userinfo.password, 10)
        // 存储密码
        const sql2 = 'insert into ev_users set ?'
        db.query(sql2,{username:userinfo.username,password:userinfo.password},(err,result)=>{
            if(err){
                return res.send({
                    status:201,
                    msg:err.message
                })
            }
            if(result.affectedRows!==1){
                return res.send({
                    status:201,
                    message:'注册用户失败，请稍后再试'
                })
            }

            res.send({
                status:200,
                message:"注册成功"
            })
        })

    })





}

//
exports.login=(req,res)=>{

    const userinfo = req.body

    // 查询用户是否存在
    const sql="select * from ev_users where username=?"

    db.query(sql,userinfo.username,(err,result)=>{
        if(err){
            return res.send({
                status:201,
                msg:err.message
            })
        }
        if(result.length!==1){
            return res.send({
                status:201,
                msg:"用户未注册"
            })
        }
        else {
            // 判断用户输入的密码和数据库中的密码是否一致
            const compareResult = bcrypt.compareSync(userinfo.password, result[0].password)

            if(!compareResult){
                return res.send({
                    status:201,
                    msg:'密码错误'
                })
            }
            else {
            //   根据用户信息生成token，并返回

                // 获取用户信息，防止密码和头像泄露设置为空
                const userinfo={...result[0],password:'',user_pic:""}
                // 利用第三方库生成token
                const tokenStr=jwt.sign(userinfo,secretKey,{
                    expiresIn: "10h"//token有效期
                })

                return res.send({
                    status:200,
                    msg:'登录成功',
                    token:"Bearer "+tokenStr
                })
            }
        }
    })
}